package util.tree;

import util.queue.LinkedQueue;

/**
 * 描述
 *
 * @author Huzz
 * @create 2022-03-29 09:42
 */
public class TreeUtil {

    /**
     * 前序遍历
     *
     * @param node
     */
    public void preorderTraversal(TreeLinkedList node) {
        if (null != node) {
            // TODO 访问当前节点node
            TreeLinkedList u;
            for (u = node.getFirstChild(); null != u; u = u.getNextSibling()) {
                preorderTraversal(u);
            }
        }
    }

    /**
     * 后序遍历
     *
     * @param node
     */
    public void postorderTraversal(TreeLinkedList node) {
        if (null != node) {
            TreeLinkedList u;
            for (u = node.getFirstChild(); null != u; u = u.getNextSibling()) {
                postorderTraversal(u);
            }
            // TODO 访问当前节点node
        }
    }

    /**
     * 中序遍历
     *
     * @param node
     */
    public void centerTraversal(TreeLinkedList node) {
        for (centerTraversal(node.getFirstChild()); null != node; centerTraversal(node.getNextSibling())) {
            // TODO 访问当前节点node
        }
    }

    /**
     * 层次遍历
     *
     * @param node
     */
    public void LevelorderTraversal(TreeLinkedList node) {
        if (null != node) {
            LinkedQueue<TreeLinkedList> Q = new LinkedQueue();
            TreeLinkedList w;
            Q.add(node);

            while (!Q.isEmpty()) {//在队列重新变空之前
                TreeLinkedList u = Q.getFirst();//取出队列的首节点u
                // TODO 访问当前节点u
                for (w = u.getFirstChild(); null != w; w = w.getNextSibling()) {
                    Q.add(w);//每个孩子w加至队列中
                }
            }
        }

    }

}
